Перейти к основному содержимому

Аутентификация NTLM

Этот документ описывает, как настроить NTLM/Windows Integrated Authentication в Moodle.

Обзор

Интегрированная аутентификация Windows использует функции безопасности клиентов и серверов Windows. Она не запрашивает у пользователей имя пользователя и пароль. Текущая информация о пользователе Windows на клиентском компьютере предоставляется браузером через процесс аутентификации «вызов/ответ» с веб-сервером сайта Moodle.

Предположения

  1. Вы используете MS Active Directory для аутентификации.
  2. Сервер, на котором размещён ваш веб-сайт, является участником домена Active Directory, участниками которого также являются ваши пользователи.
  3. Вы можете определить людей внутри вашей сети (и прошедших аутентификацию в домене) по IP-диапазону компьютеров.
  4. Вы знакомы с документацией по аутентификации LDAP или прочитали её.
  5. учётные данные домена Active Directory ваших пользователей возвращаются в формате DOMAINNAME\username из вашей службы аутентификации. Если вы используете службу Winbind из проекта Samba, это может быть неверно, в зависимости от настроек конфигурации Winbind. Если вы используете Moodle 2.4 или более позднюю версию, вы можете указать формат учётных данных домена (см. ниже). Если вы используете более раннюю версию и не можете изменить настройки, чтобы удовлетворить последнему предположению, вам необходимо удалить или закомментировать строку, которая гласит:

$username = substr(strrchr($username, '\\'), 1); //strip domain info

и добавить соответствующие строки кода, чтобы извлечь часть имени пользователя из учётных данных пользователя домена и сохранить её в $username.

Очень важно: аутентификация NTLM зависит от аутентификации LDAP, а конфигурация NTLM задаётся на странице настроек аутентификации LDAP (Управление сайтом >> Плагины >> Аутентификация >> Сервер LDAP). Поэтому, прежде чем пытаться настроить NTLM, убедитесь, что у вас правильно настроена и работает LDAP_authentication.

Установка

Установка не требуется. См. Управление сайтом >> Плагины >> Аутентификация >> Сервер LDAP для параметров конфигурации NTLM. Вам нужно только:

  • Включить NTLM SSO
  • Установить IP/маску подсети для клиентов (см. ниже)
  • (Опционально) Установить «Формат удалённого имени пользователя» для формата учётных данных пользователя домена (см. ниже)
  • В IIS: включить аутентификацию Windows
  • В Apache — использовать один из четырёх методов, описанных ниже
  • На клиентских ПК вам может потребоваться установить IP-адрес сервера moodle/URL moodle как находящийся в «локальной интрасети» (например, в Internet Explorer: инструменты -> параметры -> безопасность -> локальная интрасеть)

Важно отметить, что для запуска NTLM SSO должны быть выполнены следующие условия:

  • вы перешли на страницу входа с одним GET-запросом
  • у вас есть ldap->ntlmsso_enabled
  • у вас есть ldap->ntlmsso_subnet
  • вы не авторизованы
  • IP-адрес клиента находится в ntlmsso_subnet

Таким образом, необходимо задать IP-подсеть.

Как включить интегрированную аутентификацию

Файл auth/ldap/ntlmsso_magic.php ДОЛЖЕН иметь включённую NTLM/интегрированную аутентификацию на сервере, иначе аутентификация не будет работать.

Настройка IIS

Откройте консоль управления IIS и перейдите к файлу auth/ldap/ntlmsso_magic.php.

IIS 6.0

  1. щёлкните правой кнопкой мыши на файле, выберите «свойства»
  2. на вкладке «безопасность файла» нажмите кнопку «изменить» для аутентификации и контроля доступа
  3. снимите флажок «Разрешить анонимный доступ» и установите флажок «Интегрированная аутентификация Windows»

IIS 7.x

  1. после перехода в папку 'auth/ldap' переключитесь на представление содержимого
  2. щёлкните правой кнопкой мыши на файле, выберите «переключиться на представление функций»
  3. нажмите на значок аутентификации справа
  4. выберите «Анонимный доступ» и нажмите кнопку «Отключить»
  5. выберите «Аутентификация Windows» и нажмите кнопку «Включить»
  • Согласно этому сообщению, если вы используете IIS 7.5 (он поставляется с Windows Server 2008 R2), вам необходимо выбрать «Аутентификация Windows» и нажать «Поставщики». Будет показан список включённых поставщиков (Negotiate и NTLM, по умолчанию). Измените порядок так, чтобы NTLM был вверху списка.
  • Если «Аутентификация Windows» недоступна, вам необходимо установить её как отдельный поставщик аутентификации (в панели управления).

Настройка APACHE

В настоящее время существует четыре возможных метода:

Использование NTLM-части Samba для Apache в Linux

  • Если вы используете Ubuntu 12.04 или выше, вы можете установить это с помощью:

$ sudo apt-get install php5-ldap libapache2-mod-auth-ntlm-winbind winbind smbfs smbclient samba
$ sudo a2enmod auth_ntlm_winbind
$ sudo /etc/init.d/apache2 restart

Примечание: в Ubuntu 14.04 smbfs заменён на cifs-utils

  • Если вы используете более раннюю версию Ubuntu или другую дистрибуцию, вы можете получить плагин здесь: http://samba.org/ftp/unpacked/lorikeet/mod_auth_ntlm_winbind/. Вам необходимо скачать все файлы по ссылке, но не каталоги contrib и debian. Затем следуйте инструкциям, приведённым в файле README. Если вы используете Debian/Ubuntu, вы можете следовать этим инструкциям по компиляции.
  • После компиляции поместите его в подкаталог модулей Apache (это расположение зависит от ряда факторов, таких как компиляция Apache самостоятельно, использование пакетов различных дистрибуций Linux и так далее) и загрузите и включите модуль в конфигурации Apache. Например, если ваши модули Apache находятся в /usr/lib/apache2/modules, вам понадобится что-то вроде этого в файле конфигурации Apache (обычно называется apache2.conf или http2.conf):

<IfModule !mod_auth_ntlm_winbind.c>
LoadModule auth_ntlm_winbind_module /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so

  • Установите пакет демона Samba winbind. Этот пакет полагается на файл конфигурации Samba, чтобы получить некоторые важные настройки (например, имя домена Windows, сопоставление uid и gid и так далее). В дополнение к этому вам нужно сделать свою Linux/Unix-машину частью домена. В противном случае winbind не сможет извлечь информацию о пользователях и группах из контроллеров домена. Вам следует прочитать документацию Samba, чтобы выполнить этот шаг, но наиболее важной частью является наличие примерно следующих строк в вашем файле smb.conf, в разделе [global] (в дополнение к тому, что у вас уже есть):

workgroup = DOMAINNAME
password server = *
security = domain
encrypt passwords = true
idmap uid = 10000-20000
idmap gid = 10000-20000

и выполните команду (от имени root):

# net join DOMAINNAME -U Administrator

где DOMAINNAME — это имя домена NetBIOS Windows, а Administrator — учётная запись с достаточными привилегиями для добавления новых компьютеров в домен. Вам будет предложено ввести пароль этой учётной записи, чтобы команда выполнилась успешно.

В средах Windows вы также можете попробовать выполнить команду (от имени root):

# net join DOMAINNAME -S DCSERVER -U Administrator

где DCSERVER — это сервер контроллера домена

Также убедитесь, что вы отключили «Microsoft Network Server: подписывать сообщения цифрово (всегда)» в политике безопасности ваших контроллеров домена, если только вы не используете версию Samba, которая может подписывать SMB-пакеты.

  • Перезапустите службу winbind, чтобы применить изменения, и проверьте, что она работает нормально, выполнив:

$ wbinfo -u

Вы должны получить полный список пользователей домена Windows. Если вы используете -g вместо этого, вы получите список групп домена.

  • Проверьте, что ваш пакет winbind установил вспомогательную команду аутентификации ntlm_auth, так как она нам понадобится позже. Мы будем считать, что помощник расположен по адресу /usr/bin/ntlm_auth. Если у вас другой путь, убедитесь, что вы скорректировали путь в примере ниже.
  • Добавьте